package com.tuzes.reservation.server;

import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.DateType;

import java.util.Scanner;

/**
 * @Description: TODO
 * @author: tuzes
 * @date: Y E A R 年 {YEAR}年YEAR年{MONTH}月09日 11:18
 */

public class CodeGenerator {


    public static String scanner(String tip) {
        Scanner scanner = new Scanner(System.in);
        StringBuilder help = new StringBuilder();
        help.append("请输入" + tip + "：");
        System.out.println(help.toString());
        if (scanner.hasNext()) {
            String ipt = scanner.next();
            if (ipt != null && (!ipt.equals(""))) {
                return ipt;
            }
        }
        throw new MybatisPlusException("请输入正确的" + tip + "！");
    }


    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/reservation?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8";
        String username = "tuzes";
        String password = "368910";
        // 全局配置
        String projectPath = System.getProperty("user.dir");
        GlobalConfig.Builder builder = new GlobalConfig.Builder();
        builder.outputDir(projectPath + "/src/main/java");//设置代码生成路径
        builder.author("tuzes").dateType(DateType.ONLY_DATE).enableSwagger().build();
        GlobalConfig gc = builder.build();


        // 全局配置
//        GlobalConfig gc = new GlobalConfig();
//        gc.setOutputDir(projectPath + "/src/main/java");//设置代码生成路径
//        gc.setFileOverride(false);//是否覆盖以前文件
//        gc.setOpen(false);//是否打开生成目录
//        gc.setAuthor("tuzes");//设置项目作者名称
//        gc.setIdType(IdType.AUTO);//设置主键策略
//        gc.setBaseResultMap(true);//生成基本ResultMap
//        gc.setBaseColumnList(true);//生成基本ColumnList
//        gc.setServiceName("%sService");//去掉服务默认前缀
//        gc.setDateType(DateType.ONLY_DATE);//设置时间类型
//        mpg.setGlobalConfig(gc);

        // 数据源配置
        DataSourceConfig.Builder dscb = new DataSourceConfig.Builder(url, username, password);
        DataSourceConfig dsc = dscb.build();

        // 包配置
        PackageConfig.Builder pcb = new PackageConfig.Builder();
        pcb.parent("com.tuzes.reservation").mapper("biz.mapper").xml("biz.mapper.xml")
                .entity("entity.entity").service("biz.service").serviceImpl("biz.service.impl")
                .controller("controller");
        PackageConfig pc = pcb.build();

//        pc.setParent("com.tuzes.reservation");
//        pc.setMapper("biz.mapper");
//        pc.setXml("mapper.xml");
//        pc.setEntity("entity.entity");
//        pc.setService("biz.service");
//        pc.setServiceImpl("biz.service.impl");
//        pc.setController("controller");
//        mpg.setPackageInfo(pc);

        // 策略配置
        StrategyConfig.Builder scb = new StrategyConfig.Builder();
        StrategyConfig sc = scb.build();
//        sc.setNaming(NamingStrategy.underline_to_camel);
//        sc.setColumnNaming(NamingStrategy.underline_to_camel);
//        sc.setEntityLombokModel(true);//自动lombok
//        sc.setRestControllerStyle(true);
//        sc.setControllerMappingHyphenStyle(true);
//
//        sc.setLogicDeleteFieldName("deleted");//设置逻辑删除

        //设置自动填充配置
//        TableFill gmt_create = new TableFill("create_time", FieldFill.INSERT);
//        TableFill gmt_modified = new TableFill("update_time", FieldFill.INSERT_UPDATE);
//        ArrayList<TableFill> tableFills = new ArrayList<>();
//        tableFills.add(gmt_create);
//        tableFills.add(gmt_modified);
//        sc.setTableFillList(tableFills);
//
//        //乐观锁
//        sc.setVersionFieldName("version");
//        sc.setRestControllerStyle(true);//驼峰命名


        //  sc.setTablePrefix("tbl_"); 设置表名前缀
//        sc.setInclude(scanner("code_generator_test").split(","));
//        mpg.setStrategy(sc);



        // 代码生成器
        AutoGenerator mpg = new AutoGenerator(dsc);
        mpg.global(gc).packageInfo(pc).strategy(sc);

        // 生成代码
        mpg.execute();
    }

}